// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

/// <summary>
/// 定义WCS的控制指令类型
/// </summary>
public enum WcsControlCommandEnum
{
    /// <summary>
    /// 正常移动指令
    /// </summary>
    NormalMove = 1,
    /// <summary>
    /// 顶升控制指令
    /// </summary>
    LiftingControl = 2,
    /// <summary>
    /// 强制移动指令
    /// </summary>
    ForcedMove = 3,
    /// <summary>
    /// 查找定位点指令
    /// </summary>
    FindPosition = 4,
    /// <summary>
    /// 系统复位指令
    /// </summary>
    SystemReset = 6,
    /// <summary>
    /// 紧急停止指令
    /// </summary>
    EmergencyStop = 7,
    /// <summary>
    /// IO控制指令
    /// </summary>
    IoControl = 8,
    /// <summary>
    /// 脉冲移动指令
    /// </summary>
    PulseMove = 9,
    /// <summary>
    /// 继续执行上次指令
    /// </summary>
    ContinueLastCommand = 11
}

// RGV运行方向枚举
/// <summary>
/// 定义RGV的运行方向
/// </summary>
public enum RgvRunningDirectionEnum
{
    /// <summary>
    /// X轴正方向
    /// </summary>
    XPositive = 1,
    /// <summary>
    /// X轴负方向
    /// </summary>
    XNegative = 2,
    /// <summary>
    /// Y轴负方向
    /// </summary>
    YNegative = 3,
    /// <summary>
    /// Y轴正方向
    /// </summary>
    YPositive = 4
}

// 顶升位置枚举
/// <summary>
/// 定义顶升的位置状态
/// </summary>
public enum LiftingPositionEnum
{
    /// <summary>
    /// 顶升位置
    /// </summary>
    LiftingPosition = 1,
    /// <summary>
    /// 中间位置
    /// </summary>
    MiddlePosition = 2,
    /// <summary>
    /// 换向位置
    /// </summary>
    ReversingPosition = 3
}

/// <summary>
///  WCS写入RGV指令地址表
/// </summary>
public class WcsRgvAddressTable
{
    // WCS控制指令字
    public WcsControlCommandEnum WcsControlCommand { get; set; }
    // 起始二维码码值
    public ushort StartQrCodeValue { get; set; }
    // 中间二维码码值
    public ushort MiddleQrCodeValue { get; set; }
    // 目标二维码码值
    public ushort TargetQrCodeValue { get; set; }
    // 起点到目标点的距离长度（低16位）
    public short DistanceToTargetLow { get; set; }
    // 起点到目标点的距离长度（高16位）
    public short DistanceToTargetHigh { get; set; }
    // 中间点到目标点的距离长度（低16位）
    public short DistanceFromMiddleToTargetLow { get; set; }
    // 中间点到目标点的距离长度（高16位）
    public short DistanceFromMiddleToTargetHigh { get; set; }
    // RGV运行方向
    public RgvRunningDirectionEnum RgvRunningDirection { get; set; }
    // 顶升位置
    public LiftingPositionEnum LiftingPosition { get; set; }
    // 强制行驶的距离长度（低16位）
    public short ForcedDistanceLow { get; set; }
    // 强制行驶的距离长度（高16位）
    public short ForcedDistanceHigh { get; set; }
    // 小车IO控制
    public ushort CarIoControl { get; set; }
    // 小车运行速度
    public ushort CarRunningSpeed { get; set; }
    // 指令结束位
    public ushort CommandEndBit { get; set; }

    public WcsRgvAddressTable()
    {
        // 初始化指令结束位为1
        CommandEndBit = 1;
    }
}
